package cate.game.play.skill.passive;

import cate.common.table.d.GDSkill;
import cate.game.play.buff.Buff;
import cate.game.play.fighter.Fighter;
import cate.game.play.proce.action.ctx.ActionCtx;
import cate.game.play.proce.action.ctx.SkillActionCtx;
import cate.game.play.proce.action.ctx.TimeActionCtx;
import cate.game.play.proce.move.MoveCtx;
import cate.game.play.proce.round.RoundCtx;
import cate.game.play.proce.turn.TurnCtx;
import cate.game.play.skill.Skill;
import cate.game.play.skill.effect.SkillEffect;
import cate.game.play.skill.passive.hero.英雄觉醒PH;
import easy.java.dev.note.NoteClass;
import easy.java.dev.note.NoteField;
import easy.java.struct.ref.DoubleRef;

@NoteClass("技能被动特性处理器")
public class PassiveHandler  {

	@NoteField("所属技能")
	protected Skill skill;

	public void setSkill(Skill skill) {
		this.skill = skill;
	}

	public Skill getSkill() {
		return this.skill;
	}


	public void parse(String code) {
	}

	public void parseExt(String code) {

	}

	/**
	 * 首次登陆时（大多数英雄是第一回合入场 替补英雄则不一定）
	 * @param action
	 */
	public void onFirstEnter(ActionCtx action){

	}

	/**
	 * 回合开始前
	 * @param action
	 */
	public void beforeRoundBegin(ActionCtx action){

	}

	/**
	 * 回合开始时
	 * @param action
	 */
	public void onRoundBegin(ActionCtx action){

	}

	/**
	 * 回合结束时
	 * @param action
	 */
	public void onRoundEnd(ActionCtx action){

	}

	/**
	 * 本人行动前
	 * @param move
	 */
	public void beforeOwnerMove(MoveCtx move,TimeActionCtx action) {

	}

	/**
	 * 本人技能选择前
	 */
	public void beforeSelectTargets(MoveCtx move, Skill skill) {

	}

	/**
	 * 目标选择后(目标不可能为空)
	 * @param action
	 */
	public void afterSelectTargets(SkillActionCtx action,SkillEffect effect){

	}

	/**
	 * owner技能效果结算前
	 * @param action
	 * @param effect
	 */
	public void beforeSkillSettleAsActor(SkillActionCtx action, SkillEffect effect, Fighter target){

	}

	/**
	 * 技能效果结算前（作为target）
	 * @param action
	 * @param effect
	 */
	public void beforeSkillSettleAsTarget(SkillActionCtx action, SkillEffect effect){

	}


	/**
	 * 技能效果结算后（作为target）
	 * @param action
	 * @param effect
	 */
	public void afterSkillSettleAsTarget(SkillActionCtx action, SkillEffect effect){

	}


	/**
	 * 本人攻击一次后
	 * @param action
	 * @param totalDamage
	 * @param strike
	 */
	public void afterOneAttack(SkillActionCtx action, long totalDamage, boolean strike,Fighter target) {

	}


	/**
	 * 本人受到一次技能攻击后
	 * @param action
	 * @param totalDamage
	 * @param strike
	 */
	public void afterSufferOneAttack(SkillActionCtx action, long totalDamage, boolean strike) {

	}

	/**
	 * 其他人受到一次技能攻击后
	 * @param action
	 * @param target
	 * @param totalDamage
	 * @param strike
	 */
	public void afterOtherOneAttack(SkillActionCtx action, Fighter target, long totalDamage, boolean strike){

	}

	/** @return 被闪避后 */
	public void onMissAsActor(SkillActionCtx action,Fighter target){

	}

	/** @return 闪避后 */
	public void onMissAsTarget(SkillActionCtx action){

	}


	/**
	 * 修正伤害
	 * @param action
	 * @param actor
	 * @param reason
	 * @param doubleRef
	 */
	public void adjustDamage(ActionCtx action, Fighter actor,byte nature, int reason, DoubleRef doubleRef){

	}

	/**
	 * 修正技能伤害
	 * @param action
	 * @param reason
	 * @param doubleRef
	 */
	public void adjustSkillDamage(ActionCtx action, Fighter actor, int reason, DoubleRef doubleRef){

	}

	/**
	 * 修正致死伤害
	 * @param action
	 * @param reason
	 * @param doubleRef
	 */
	public void adjustDeadlyDamage(ActionCtx action,Fighter actor, int reason, DoubleRef doubleRef){

	}

	/**
	 * 修正我方的致死伤害
	 * @param action
	 * @param reason
	 * @param doubleRef
	 */
	public boolean adjustFriendDeadlyDamage(ActionCtx action,Fighter actor,Fighter target, int reason, DoubleRef doubleRef){
		return false;
	}


	/**
	 * 吸血溢出后
	 * @param action
	 * @param value
	 */
	public void onOverFlowAttrSuck(SkillActionCtx action, long value){

	}

	/**
	 * 施法者的一个技能结算完后
	 * @param action
	 */
	public void onSkillDone(SkillActionCtx action){

	}

	/**
	 * 一次技能行动结束后（施法者本人）
	 * @param move
	 */
	public void onOwnerMoveDone(MoveCtx move,TimeActionCtx action){

	}


	/**
	 * 行动结束之后
	 * @param move
	 */
	public void afterMoveDone(MoveCtx move){

	}

	/**
	 * 全场有人行动完了（包括自己）
	 * @param move
	 */
	public void onMoveDone(MoveCtx move,TimeActionCtx action){

	}

	/**
	 * 自己添加buff时
	 * @param action
	 * @param addBuff
	 */
	public void onOwnerAddBuff(ActionCtx action, Buff addBuff) {}

	/**
	 * 有人添加buff时
	 * @param action
	 * @param otherBuff
	 */
	public void onOtherAddBuff(ActionCtx action, Buff otherBuff) {}


	/**
	 * 调整自己添加的buff
	 * @param action
	 * @param otherBuff
	 */
	public void adjustCastBuff(ActionCtx action, Buff otherBuff){
	}

	/**
	 * buff添加前
	 * @param action
	 * @param otherBuff
	 */
	public void beforeOwnerBuffAdd(ActionCtx action, Buff otherBuff){

	}

	/** owner的一个buff失效时 */
	public void onOwnerBuffInvalid(ActionCtx action, byte invalidReason, Buff otherBuff){

	}

	/** caster的一个buff失效时 */
	public void onCastBuffInvalid(ActionCtx action, byte invalidReason, Buff otherBuff){

	}

	/** 抗控成功时 */
	public void onAntiCtrl(ActionCtx action,Buff buff){

	}


	/**
	 * 有人连击时
	 * @param turn
	 * @param action
	 * @param fighter 连击的人
	 * @param passiveSkill 触发连击的被动技能
	 */
	public void onDoubleAct(TurnCtx turn, TimeActionCtx action, Fighter fighter,int passiveSkill){

	}

	/** 本人死亡时 */
	public void onDead(ActionCtx action,Fighter killer) {}

	/** 死亡并且没有立即复活 */
	public void onDeadNoRebirth(ActionCtx action){

	}

	/** 场上有人死亡时 */
	public void onOtherDead(ActionCtx action,Fighter killer,Fighter deader) {}

	/**
	 * 场上有人即将死亡时（还没进行死亡buff移除等操作）
	 */
	public void beforeOtherDead(ActionCtx action, Fighter fighter) {

	}

	/** 击杀目标时 */
	public void onKill(ActionCtx action,Fighter target){

	}

	/** 本人复活时 */
	public void onResurrect(ActionCtx action){

	}

	/**
	 * 立即复活
	 * @param action
	 * @return
	 */
	public void immediateRebirth(ActionCtx action) {
	}

	/**
	 * 英雄觉醒值变化时
	 * @param action
	 * @param value
	 */
	public void onEnergyChange(ActionCtx action,boolean auto,double value){

	}

	/**
	 * 觉醒变更
	 * @param action
	 */
	public void onAwaken(ActionCtx action,boolean start){

	}

	public void onPreSelectByCD(RoundCtx round,Skill selectSkill){

	}

	//结算优先级
	public int priority() {
		return GDSkill.Priority.DEFAULT;
	}

}
